/**
    ATClab - scriptable Air Traffic Control simulations.
    Copyright (C) 2010 openatclab@gmail.com

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
**/

#ifndef __ATC_ACSPRITE_HDR__
#define __ATC_ACSPRITE_HDR__


#include "aircraftsprite.h"
#include "canvas.h"
#include "canvas_types.h"


namespace atc {

    //
    // atc::ACSprite
    //
	class ACSprite {

	public:
		ACSprite( atc::AircraftSprite *sprite ) : _sprite( sprite ) {}
		~ACSprite() {};

	public:
		AircraftSprite * sprite() { return _sprite; }
		
	protected:
		AircraftSprite *_sprite;
	};


    //
    // atc::ACLocator
    //
	class ACLocator : public Q3CanvasEllipse, public ACSprite {

    public:
        ACLocator( Q3Canvas *canvas, AircraftSprite *sprite ) 
			: Q3CanvasEllipse( canvas ), ACSprite( sprite ) {};
        ~ACLocator() {};

    public:
		int  rtti() const { return CanvasItem::RTTI_LOCATOR; }

	};


    //
    // atc::ACCallOut
    //
	class ACCallOut : public Q3CanvasLine, public ACSprite {

    public:
        ACCallOut( Q3Canvas *canvas, AircraftSprite *sprite ) 
			: Q3CanvasLine( canvas ), ACSprite( sprite ) {};
        ~ACCallOut() {};

    public:
		int rtti() const { return CanvasItem::RTTI_CALLOUT; }

	};


    //
    // atc::ACDataBlk
    //
	class ACDataBlk : public Q3CanvasText, public ACSprite {

    public:
        ACDataBlk( Q3Canvas *canvas, AircraftSprite *sprite ) 
			: Q3CanvasText( canvas ), ACSprite( sprite ) {};
        ~ACDataBlk() {};

    public:
		int rtti() const { return CanvasItem::RTTI_DATABLK; }

	};


    //
    // atc::ACCallBlk
    //
	class ACCallBlk : public Q3CanvasText, public ACSprite {

    public:
        ACCallBlk( Q3Canvas *canvas, AircraftSprite *sprite ) 
			: Q3CanvasText( canvas ), ACSprite( sprite ) {};
        ~ACCallBlk() {};

    public:
		int rtti() const { return CanvasItem::RTTI_CALLBLK; }

	};


    //
    // atc::ACAltBlk
    //
	class ACAltBlk : public Q3CanvasText, public ACSprite {

    public:
        ACAltBlk( Q3Canvas *canvas, AircraftSprite *sprite ) 
			: Q3CanvasText( canvas ), ACSprite( sprite ) {};
        ~ACAltBlk() {};

    public:
		int rtti() const { return CanvasItem::RTTI_ALTBLK; }

	};


    //
    // atc::ACVelBlk
    //
	class ACVelBlk : public Q3CanvasText, public ACSprite {

    public:
        ACVelBlk( Q3Canvas *canvas, AircraftSprite *sprite ) 
			: Q3CanvasText( canvas ), ACSprite( sprite ) {};
        ~ACVelBlk() {};

    public:
		int rtti() const { return CanvasItem::RTTI_VELBLK; }

	};


};

#endif
